package com.linkai.JUC._03_lock8;

import java.util.concurrent.TimeUnit;

/**
 * @Description: 8锁：关于锁的8个问题
 *               注意理解锁到底是锁的什么东西
 *               （1）普通方法加 synchronize，锁的是对象
 *               （2）static 方法加 synchronize，锁的是 Class 类模版
 *
 *              1. 标准情况下： 先打印 “发短信”，然后打印“打电话”
 *              2. 假设 sendSms 延迟4秒呢？  还是 发短信 -> 打电话
 * @Author: 林凯
 * @Date: 2021/10/23 20:33
 */
public class Test01 {
    public static void main(String[] args) throws InterruptedException {
        Phone phone = new Phone();
        new Thread(()->{
            phone.sendSms();
        }).start();

        TimeUnit.SECONDS.sleep(1);

        new Thread(()->{
            phone.call();
        }).start();
    }
}

class Phone{

    // synchronize 锁的对象是方法的调用者
    // 2个方法用的是同一把锁，谁先拿到，谁执行
    public synchronized void sendSms() {
        System.out.println("发短信");
    }

    public synchronized void call() {
        System.out.println("打电话");
    }
}
